package projectAnalysis.advancedTechAnalyzer;

import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; // 正确导入
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;

public class JavaSourceAnalyzer {
    // 提取Java文件中的所有注解
    public List<String> extractAnnotations(File javaFile) {
        try {
            CompilationUnit cu = StaticJavaParser.parse(javaFile);
            List<AnnotationExpr> annotations = cu.findAll(AnnotationExpr.class);
            return annotations.stream()
                    .map(anno -> anno.getNameAsString())
                    .collect(Collectors.toList());
        } catch (IOException e) {
            System.out.println("解析Java文件失败（" + javaFile.getPath() + "）：" + e.getMessage());
            return java.util.Collections.emptyList();
        }
    }

    // 提取类实现的接口（最终适配版）
    public List<String> extractInterfaces(File javaFile) {
        try {
            CompilationUnit cu = StaticJavaParser.parse(javaFile);
            // 1. 获取所有类或接口的声明
            List<ClassOrInterfaceDeclaration> declarations = cu.findAll(ClassOrInterfaceDeclaration.class);

            // 2. 过滤出“类”（!isInterface() 表示不是接口，即类）
            // 3. 提取类实现的接口（implementedTypes）
            return declarations.stream()
                    .filter(decl -> !decl.isInterface()) // 关键：不是接口 → 是类
                    .flatMap(decl -> decl.getImplementedTypes().stream()) // 获取类实现的接口
                    .map(ClassOrInterfaceType::getNameAsString) // 转换为接口名
                    .collect(Collectors.toList());
        } catch (IOException e) {
            System.out.println("解析接口失败（" + javaFile.getPath() + "）：" + e.getMessage());
            return java.util.Collections.emptyList();
        }
    }
}